#include <iostream>
#include <array>
#include <string>
#include <deque>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>

using namespace std;
class Order
{
public:
    int _id;
    string _info;
public:
    Order(int id , string info) 
    :_id(id)
    ,_info(info)
    {}
    ~Order() {}
    bool operator< (const Order& rhs) const {
        if(_id != rhs._id)
        {
            return _id < rhs._id;
        }
        return _info < rhs._info;
    }
};
struct ComparePoint
{
    bool operator() (const Order &lhs, const Order &rhs) const {
        if(lhs._id != rhs._id)
        {
            return lhs._id > rhs._id;
        }
        return lhs._info > rhs._info;
    }
};


int main(int argc, char const *argv[])
{
    map<Order, int, ComparePoint> m2;
    Order o1(4, "bob");
    Order o2(6, "timi");
    Order o3(4, "jack");
    Order o4(2, "link");
    m2.insert({o1, 2});
    m2.insert({o2, 6});
    m2.insert({o3, 1});
    m2.insert({o4, 8});
    
    unordered_map<int, int> mp1;

    for (auto &&i : m2)
    {
        cout << i.first._id << "-"<< i.first._info << ", " << i.second << endl;
    }

    // map<int, string> m;
    // m.insert({12, "yi"});
    // m.insert({2, "liu"});
    // m.insert({6, "er"});
    // m.insert({10, "yi"});
    // // key 存在之后不会存储，也不会修改
    // m.insert({2, "666"});
    // cout << "size :" << m.size() << endl;
    // // cout << m[2] << endl;
    // // cout << m[10] << endl;
    // for (auto &&i : m)
    // {
    //     cout << i.first << ", " << i.second << endl;
    // }
    

    // // 底层传一个类型，会实例化出函数对象,所以穿类就可以，要么在类中重载< ,要么less模板特化，要么重新定义类，替换默认less
    // // set <Order, ComparePoint> s2;
    // set<Order> s2;
    // Order o1(4, "bob");
    // Order o2(6, "timi");
    // Order o3(4, "jack");
    // Order o4(2, "link");
    // s2.insert(o1);
    // s2.insert(o2);
    // s2.insert(o3);
    // s2.insert(o4);
    // for (auto &&i : s2)
    // {
    //     cout << i._id << ", " << i._info << endl;
    // }
    
    // set<int> s1 = {23, 7, 9, 42, 100, 7, 8, 9};
    // cout << s1.size() << endl;
    // for (auto &&i : s1)
    // {
    //     cout << i << ", ";
    // }
    // cout << endl;

    // 实现栈和队列
    deque<int> d;
    // d.push_front(1);
    // d.push_back(9);
    // d.pop_back();
    // d.pop_front();


    // array

    // // 没有初始化，数据是随机的，初始化一个值之后其他的值会默认初始化为0
    // array<int , 4> a1 = {100};
    // array<string, 6> a2 = {"hello", "bye"};
    
    // // 静态不会不会自动扩容
    // // a1[4] = 999;    //越界访问
    // for (auto &&i : a1)
    // {
    //     cout << i << endl;
    // }
    
    return 0;
}
